const DB = require('../db/index')
const Bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const { secretKey } = require('../utils/index')
// SQL查询语句
const { checkUsernameSql, checkEmailSql, checkPhone } = require('../utils/sql/user');

// 注册用户
exports.register = (req, res) => {
  const userinfo = req.body
  if (!userinfo.username || !userinfo.password || !userinfo.email) {
    return res.cc('输入有误')
  }


  const registerSql = 'insert into user set ?'

  // 用户查询
  DB.query(checkUsernameSql, userinfo.username, (err, result) => {
    if (err) return res.cc(err)

    // 用户名是否重复
    if (result.length > 0) return res.cc('该用户名已注册')

    // 邮箱查询
    DB.query(checkEmailSql, userinfo.email, (err, result) => {
      if (err) return res.cc(err)
      // 邮箱是否重复
      if (result.length > 0) return res.cc('该邮箱已注册')
      // 注册成功,密码进行加密
      userinfo.password = Bcrypt.hashSync(userinfo.password, 10)

      // 获取当前时间戳, 除去毫秒
      let update_time = create_time = Math.floor(Date.now() / 1000)
      // 把数据插入到数据库
      DB.query(registerSql, { username: userinfo.username, password: userinfo.password, email: userinfo.email, 'create_time': create_time, 'update_time': update_time, nickname: userinfo.username }, (err, result) => {
        if (err) return res.cc(err)

        if (result.affectedRows !== 1) return res.cc('注册失败,请稍后重试')

        res.json({ code: 200, message: '注册成功', success: true })
      })
    })

  })
}

// 用户登陆
exports.login = (req, res) => {
  const { username, password } = req.body

  // 判断用户传输过来的数据完整性
  if (!username || !password) return res.cc('提交表单的内容不完整')

  DB.query(checkUsernameSql, username, (err, result) => {
    const user = result
    if (err) return res.cc(err)

    // 查询是否有用户名
    if (result.length === 0) return res.cc("用户名或密码错误")

    // 这里如何检查密码错误
    const isPasswordValid = Bcrypt.compareSync(password, user[0].password)

    if (isPasswordValid) {
      const token = jwt.sign({ username: user[0].username,id:user[0].id }, secretKey, { expiresIn: '2h' })
      return res.json({ code: 200, data: { token }, message: '登陆成功', success: true })
    } else {
      return res.cc("用户名或密码错误")
    }

  })

}

// 获取用户信息
exports.getinfo = (req, res) => {
  const username = req.user.username
  const getUserInfoSql = 'select * from user where binary username=?'
  DB.query(getUserInfoSql, username, (err, result) => {
    if (err) return res.cc(err)
    const { username, avatar, nickname, phone, email, user_level_id } = result[0]
    res.json({ code: 200, data: { username, avatar, nickname, phone, email, user_level_id }, message: 'ok', success: true })
  })
}

// 更新用户信息
exports.changeUserinfo = (req, res) => {
  const userinfo = req.body
  const username = req.user.username
  const changeUserinfo = 'update user set ? where binary username = ? '
  const chekckRe = 'select email, phone from user where username = ?'

  // 获取当前时间戳, 除去毫秒
  let update_time = create_time = Math.floor(Date.now() / 1000)
  userinfo.update_time = update_time
  // 更新用户信息
  DB.query(changeUserinfo, [userinfo, username], (err, result) => {
    if (err) return res.cc(err)
    if (result.affectedRows === 1) return res.json({ code: 200, message: '修改成功', success: true })
  })

  // // 查看传过来的手机号和邮箱是否有修改, 如果没有改变直接更新传过来的内容
  // DB.query(chekckRe, username, (err, result) => {
  //   if (err) return res.cc(err)
  //   const emailState = result[0].email === userinfo.email
  //   const phoneState = result[0].phone === userinfo.phone

  //   if (emailState && phoneState) {
  //     // 更新用户信息
  //     DB.query(changeUserinfo, [userinfo, username], (err, result) => {
  //       if (err) return res.cc(err)
  //       if (result.affectedRows === 1) return res.json({ code: 200, message: '修改成功', success: true })
  //     })
  //   }
  //   // else {
  //   //   // 查询需要修改的邮箱是否已存在
  //   //   DB.query(checkEmailSql, userinfo.email, (err, result) => {
  //   //     if (err) return res.cc(err)
  //   //     if (result.length > 0) return res.cc("该邮箱已存在, 请更换邮箱")
  //   //     // 查询手机号是否存在
  //   //     DB.query(checkPhone, userinfo.phone, (err, result) => {
  //   //       if (err) return res.cc(err)
  //   //       if (result.length > 0) return res.cc("该手机号已存在, 请更换手机号")
  //   //       // 更新用户信息
  //   //       DB.query(changeUserinfo, [userinfo, username], (err, result) => {
  //   //         if (err) return res.cc(err)
  //   //         if (result.affectedRows === 1) return res.json({ code: 200, message: '修改成功', success: true })
  //   //       })
  //   //     })
  //   //   })
  //   // }

  // })

}
